/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package Model;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.StringTokenizer;
import javax.swing.JOptionPane;

/**
 *
 * @author William
 */
public class DB {

    static String cadenaConexion = "jdbc:postgresql://localhost/SMAAMDB?" + "user=postgres&password=root";

    public boolean insertar(Usuario user) {
        Connection conexion = null;
        Statement sentencia = null;
        ResultSet resultado = null;
        try {
            Class.forName("org.postgresql.Driver");
            conexion = DriverManager.getConnection(cadenaConexion);
            sentencia = conexion.createStatement();

            String consultaSQL = "insert into usuario values ('" + user.getNombre() + "','" + user.getContraseña() + "','" + user.getNivelAcceso() + "')";
            sentencia.executeUpdate(consultaSQL);
            sentencia.close();
            conexion.close();
            return true;

        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }

//    public boolean insertarMatricula(Estudiante user) {
//        Connection conexion = null;
//        Statement sentencia = null;
//        ResultSet resultado = null;
//        try {
//            Class.forName("org.postgresql.Driver");
//            conexion = DriverManager.getConnection(cadenaConexion);
//            sentencia = conexion.createStatement();
//
//            String consultaSQL = "insert into estudiante values ('" + user.getId() + "', '" + user.getNombre()+ "',"
//                    + "'" + user.getPApellido() + "','" + user.getSApellido()+ "','" + user.getFNacimiento()+ "',"
//                    + "'" + user.getTDescuento() + "','" + user.getId() + "','" + user.getNResponsable() + "','" + user.getTelefono() + "'"
//                    + ",'" + user.getTResponsable() + "','" + user.getCDescuento() + "')";
//            sentencia.executeUpdate(consultaSQL);
//            sentencia.close();
//            conexion.close();
//            return true;
//        } catch (Exception e) {
//            e.printStackTrace();
//            return false;
//        }
//    }
    public boolean borrarMatricula(String id) {
        Connection conexion = null;
        Statement sentencia = null;
        ResultSet resultado = null;
        try {
            Class.forName("org.postgresql.Driver");
            conexion = DriverManager.getConnection(cadenaConexion);
            sentencia = conexion.createStatement();

            String consultaSQL = "delete from matricula where id = '" + id + "'";
            sentencia.executeUpdate(consultaSQL);
            sentencia.close();
            conexion.close();
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }

    public boolean borrarUsuario(String id) {
        Connection conexion = null;
        Statement sentencia = null;
        ResultSet resultado = null;
        try {
            Class.forName("org.postgresql.Driver");
            conexion = DriverManager.getConnection(cadenaConexion);
            sentencia = conexion.createStatement();

            String consultaSQL = "delete from usuario where id = '" + id + "'";
            sentencia.executeUpdate(consultaSQL);
            sentencia.close();
            conexion.close();
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }

    public ArrayList<Usuario> listarUsuarios() {
        ArrayList<Usuario> res = new ArrayList<Usuario>();

        Connection conexion = null;
        Statement sentencia = null;
        ResultSet resultado = null;
        try {
            Class.forName("org.postgresql.Driver");
            conexion = DriverManager.getConnection(cadenaConexion);
            sentencia = conexion.createStatement();
            resultado = sentencia.executeQuery("select * from usuario");
            Usuario u = new Usuario();
            while (resultado.next()) {
//JOptionPane.showMessageDialog(null, u.getNombre());
                u.setContraseña(resultado.getString("contrasena"));
//                u.setId(resultado.getString("id"));
                u.setNombre(resultado.getString("id"));
//                u.setPrimerApellido(resultado.getString("papellido"));
//                u.setSegundoApellido(resultado.getString("sapellido"));
//                u.setNombreUsuario(resultado.getString("nusuario"));
//                u.setEmail(resultado.getString("email"));

                u.setNivelAcceso(resultado.getString("rol"));

                res.add(u);
                u = new Usuario();
            }
            sentencia.close();
            conexion.close();

        } catch (Exception e) {
            e.printStackTrace();

        }

        return res;
    }

//    
    public int check(String user, String pass) {

        String consultaSQL = "select * from usuario where id='" + user + "' and contrasena='" + pass + "'";

        Connection conexion = null;
        Statement sentencia = null;
        ResultSet resultado = null;
        try {
            Class.forName("org.postgresql.Driver");
            conexion = DriverManager.getConnection(cadenaConexion);
            sentencia = conexion.createStatement();
            resultado = sentencia.executeQuery(consultaSQL);
            int i = 0;
            String tmp = new String();
            while (resultado.next()) {
//JOptionPane.showMessageDialog(null, u.getNombre());
                tmp = resultado.getString("rol");
                i++;
            }
            if (i != 0) {
                if (tmp.equals("a") || tmp.equals("A")) {
                    return 1;
                }
                if (tmp.equals("e") || tmp.equals("E")) {
                    return 2;
                }
            }
            sentencia.close();
            conexion.close();

        } catch (Exception e) {
            e.printStackTrace();

        }

        return 0;
    }

    public ArrayList<Factura> listarFacturas(String est) {
        ArrayList<Factura> res = new ArrayList<Factura>();

        Connection conexion = null;
        Statement sentencia = null;
        ResultSet resultado = null;
        try {
            Class.forName("org.postgresql.Driver");
            conexion = DriverManager.getConnection(cadenaConexion);
            sentencia = conexion.createStatement();
            resultado = sentencia.executeQuery("select descuento::numeric,fecha,estudiante,"
                    + "monto_a_pagar::numeric,monto_cancelado::numeric,mes,anio,saldo::numeric,"
                    + "responsable,monto_total::numeric from factura where estudiante = '" + est + "'");
            Factura u = new Factura();

            while (resultado.next()) {
//                double tmp=resultado.getDouble("monto_total");
//JOptionPane.showMessageDialog(null, resultado.getString("fecha"));
                u.setDescuento(resultado.getDouble("descuento"));
                u.setFecha(resultado.getString("fecha"));
                u.setAnioP(resultado.getInt("anio"));
                u.setMesP(resultado.getInt("mes"));
                u.setEstudiante(resultado.getString("estudiante"));
                u.setMonto_a_pagar(resultado.getDouble("monto_a_pagar"));
                u.setMonto_cancelado(resultado.getDouble("monto_cancelado"));
                u.setSaldo(resultado.getDouble("saldo"));
                u.setResponsable(resultado.getString("responsable"));
                u.setMonto_total(resultado.getDouble("monto_total"));
                res.add(u);
                u = new Factura();
            }
            sentencia.close();
            conexion.close();

        } catch (Exception e) {
            e.printStackTrace();

        }
        return res;
    }
    
    public ArrayList<Ausencia> listarAusencias(String est) {
        ArrayList<Ausencia> res = new ArrayList<Ausencia>();

        Connection conexion = null;
        Statement sentencia = null;
        ResultSet resultado = null;
        try {
            Class.forName("org.postgresql.Driver");
            conexion = DriverManager.getConnection(cadenaConexion);
            sentencia = conexion.createStatement();
            resultado = sentencia.executeQuery("select * from ausencia_estudiante where estudiante = '" + est + "'");
            Ausencia u = new Ausencia();

            while (resultado.next()) {
//JOptionPane.showMessageDialog(null, u.getNombre());
                u.setAnnio(resultado.getInt("anio"));
                u.setFecha(resultado.getString("fecha"));
                u.setEstudiante(resultado.getString("estudiante"));
                u.setClase(resultado.getInt("clase"));
                u.setMes(resultado.getInt("mes"));
                res.add(u);
                u = new Ausencia();
            }
            sentencia.close();
            conexion.close();

        } catch (Exception e) {
            e.printStackTrace();

        }
        return res;
    }

    public ArrayList<Ausencia> listarAusenciasMes(String est,int mes) {
        ArrayList<Ausencia> res = new ArrayList<Ausencia>();

        Connection conexion = null;
        Statement sentencia = null;
        ResultSet resultado = null;
        try {
            Class.forName("org.postgresql.Driver");
            conexion = DriverManager.getConnection(cadenaConexion);
            sentencia = conexion.createStatement();
            resultado = sentencia.executeQuery("select * from ausencia_estudiante where estudiante = '" + est + "' and mes = '"+mes+"'");
            Ausencia u = new Ausencia();

            while (resultado.next()) {
//JOptionPane.showMessageDialog(null, u.getNombre());
                u.setAnnio(resultado.getInt("anio"));
                u.setFecha(resultado.getString("fecha"));
                u.setEstudiante(resultado.getString("estudiante"));
                u.setClase(resultado.getInt("clase"));
                u.setMes(resultado.getInt("mes"));
                res.add(u);
                u = new Ausencia();
            }
            sentencia.close();
            conexion.close();

        } catch (Exception e) {
            e.printStackTrace();

        }
        return res;
    }
    
    public ArrayList<Estudiante> listarEstudiantes() {
        ArrayList<Estudiante> res = new ArrayList<Estudiante>();

        Connection conexion = null;
        Statement sentencia = null;
        ResultSet resultado = null;
        try {
            Class.forName("org.postgresql.Driver");
            conexion = DriverManager.getConnection(cadenaConexion);
            sentencia = conexion.createStatement();
            resultado = sentencia.executeQuery("select * from estudiante");
            Estudiante u = new Estudiante();

            while (resultado.next()) {
  
//                String delim = "-";
//        StringTokenizer tok = new StringTokenizer(resultado.getString("fecha_nac"), delim, true);
////      
//       tok.nextToken();
//         tok.nextToken();
//           tok.nextToken();
//        tok.nextToken();
//       JOptionPane.showMessageDialog(null, tok.nextToken());
                u.setFechaN(resultado.getString("fecha_nac"));
                u.setNombre(resultado.getString("nombre"));
                u.setId(resultado.getString("cedula"));
                u.setAp1(resultado.getString("apellido1"));
                u.setAp2(resultado.getString("apellido2"));
                u.setActivo(resultado.getBoolean("activo"));
                u.setId_Respondable(resultado.getString("cedula_resp"));
                u.setNom_Resposable(resultado.getString("nombre_resp"));
                u.setEmail(resultado.getString("email1_est"));
                u.setEmail_Responsable(resultado.getString("email_resp"));
                u.setTel(resultado.getInt("tel1_est"));
                u.setTel2(resultado.getInt("tel2_est"));
                u.setTel_responsable(resultado.getInt("tel_resp"));

                res.add(u);
                u = new Estudiante();
            }
            sentencia.close();
            conexion.close();

        } catch (Exception e) {
            e.printStackTrace();

        }

        return res;

    }
    
    public boolean pagoMesActual(String est,int mes,int anno){
        
         ArrayList<Factura> res = new ArrayList<Factura>();

        Connection conexion = null;
        Statement sentencia = null;
        ResultSet resultado = null;
        try {
            Class.forName("org.postgresql.Driver");
            conexion = DriverManager.getConnection(cadenaConexion);
            sentencia = conexion.createStatement();
            resultado = sentencia.executeQuery("select descuento::numeric,fecha,estudiante,"
                    + "monto_a_pagar::numeric,monto_cancelado::numeric,mes,anio,saldo::numeric,"
                    + "responsable,monto_total::numeric from factura where estudiante = '" + est + "'and anio='"+anno+"'"
                    + "and mes='"+mes+"'");
            Factura u = new Factura();

            while (resultado.next()) {
//                double tmp=resultado.getDouble("monto_total");
//JOptionPane.showMessageDialog(null, resultado.getString("fecha"));
                u.setDescuento(resultado.getDouble("descuento"));
                u.setFecha(resultado.getString("fecha"));
                u.setAnioP(resultado.getInt("anio"));
                u.setMesP(resultado.getInt("mes"));
                u.setEstudiante(resultado.getString("estudiante"));
                u.setMonto_a_pagar(resultado.getDouble("monto_a_pagar"));
                u.setMonto_cancelado(resultado.getDouble("monto_cancelado"));
                u.setSaldo(resultado.getDouble("saldo"));
                u.setResponsable(resultado.getString("responsable"));
                u.setMonto_total(resultado.getDouble("monto_total"));
                res.add(u);
                u = new Factura();
            }
            for(Factura i: res){
               
                if(i.getSaldo()==0){
                    // JOptionPane.showMessageDialog(null, i.getSaldo() +"  "+est);
                    return true;
                }
            }
            sentencia.close();
            conexion.close();

        } catch (Exception e) {
            e.printStackTrace();

        }
        
        
        return false;
    }
    
    public Estudiante listarEstudiante(String id) {
        

        Connection conexion = null;
        Statement sentencia = null;
        ResultSet resultado = null;
        Estudiante u = new Estudiante();
        try {
            Class.forName("org.postgresql.Driver");
            conexion = DriverManager.getConnection(cadenaConexion);
            sentencia = conexion.createStatement();
            resultado = sentencia.executeQuery("select * from estudiante where cedula= '"+id+"'");
            

            while (resultado.next()) {
  
//                String delim = "-";
//        StringTokenizer tok = new StringTokenizer(resultado.getString("fecha_nac"), delim, true);
////      
//       tok.nextToken();
//         tok.nextToken();
//           tok.nextToken();
//        tok.nextToken();
//       JOptionPane.showMessageDialog(null, tok.nextToken());
//                u.setFechaN(resultado.getString("fecha_nac"));
//                u.setNombre(resultado.getString("nombre"));
//                u.setId(resultado.getString("cedula"));
//                u.setAp1(resultado.getString("apellido1"));
//                u.setAp2(resultado.getString("apellido2"));
//                u.setActivo(resultado.getBoolean("activo"));
//                u.setId_Respondable(resultado.getString("cedula_resp"));
//                u.setNom_Resposable(resultado.getString("nombre_resp"));
                u.setEmail(resultado.getString("email1_est"));
                u.setEmail_Responsable(resultado.getString("email_resp"));
                u.setTel(resultado.getInt("tel1_est"));
                u.setTel2(resultado.getInt("tel2_est"));
                u.setTel_responsable(resultado.getInt("tel_resp"));

                
                
            }
            sentencia.close();
            conexion.close();

        } catch (Exception e) {
            e.printStackTrace();

        }

        return u;

    }
}
